package site.isscloud.project.mapper;

import org.apache.ibatis.annotations.Param;
import site.isscloud.project.domain.PjAlarmEvent;

import java.math.BigDecimal;
import java.util.List;
import java.util.Date;

/**
 * 告警事件Mapper接口
 */
public interface PjAlarmEventMapper {
    /**
     * 查询告警事件
     */
    PjAlarmEvent selectPjAlarmEventById(Long id);

    /**
     * 查询温度告警事件列表（带位置信息）
     */
    List<PjAlarmEvent> selectTemperatureAlarmEventList(PjAlarmEvent pjAlarmEvent);

    /**
     * 查询非温度告警事件列表（不带位置信息）
     */
    List<PjAlarmEvent> selectNonTemperatureAlarmEventList(PjAlarmEvent pjAlarmEvent);

    /**
     * 新增告警事件
     */
    int insertPjAlarmEvent(PjAlarmEvent pjAlarmEvent);

    /**
     * 修改告警事件
     */
    int updatePjAlarmEvent(PjAlarmEvent pjAlarmEvent);

    /**
     * 删除告警事件
     */
    int deletePjAlarmEventById(Long id);

    /**
     * 批量删除告警事件
     */
    int deletePjAlarmEventByIds(Long[] ids);

    /**
     * 根据事件编号查询
     */
    PjAlarmEvent selectPjAlarmEventByEventNo(String eventNo);

    /**
     * 查询活跃的事件（状态为0）
     */
    List<PjAlarmEvent> selectActiveEvents();

    /**
     * 根据设备、通道、类型、米标查询活跃事件
     */
    List<PjAlarmEvent> selectActiveEventsByDeviceChannelTypeMeter(
            @Param("deviceNo") String deviceNo,
            @Param("chanel") Integer chanel,
            @Param("alarmType") Integer alarmType,
            @Param("meterMark") Integer meterMark);

    // PjAlarmEventMapper.java
    /**
     * 根据设备、通道、类型查询活跃事件（用于激光器故障）
     */
    List<PjAlarmEvent> selectActiveEventsByDeviceChannelType(
            @Param("deviceNo") String deviceNo,
            @Param("chanel") Integer chanel,
            @Param("alarmType") Integer alarmType);


    /**
     * 查询需要关闭的事件（最后告警时间超过3分钟）
     */
    List<PjAlarmEvent> selectEventsToClose(@Param("thresholdTime") Date thresholdTime);

    /**
     * 批量更新事件状态
     */
    int updateEventStatusBatch(
            @Param("ids") List<Long> ids,
            @Param("eventStatus") Integer eventStatus);

    /**
     * 处理事件（标记为已处理）
     */
    int handleEvent(
            @Param("id") Long id,
            @Param("handledResult") String handledResult,
            @Param("handledBy") String handledBy,
            @Param("handledTime") Date handledTime);

    /**
     * 更新事件统计信息
     */
    int updateEventStats(
            @Param("id") Long id,
            @Param("alarmCount") Integer alarmCount,
            @Param("lastAlarmId") Long lastAlarmId,
            @Param("alarmIds") String alarmIds,
            @Param("maxTemperature") BigDecimal maxTemperature,
            @Param("minTemperature") BigDecimal minTemperature,
            @Param("avgTemperature") BigDecimal avgTemperature);
}